package cn.icare.cms;

import cn.icare.cms.dao.po.Item;
import cn.icare.cms.dao.po.Promotion;
import cn.icare.cms.model.ro.AddPromotionRO;
import cn.icare.cms.model.ro.EditPromotionRO;
import cn.icare.cms.model.ro.SavePromotionItemRo;
import cn.icare.cms.model.vo.rest.MsgDatasVO;

import java.util.List;

public interface PromotionService {
    Integer createOne(AddPromotionRO ro, String actionUserName);

    boolean updateOne(EditPromotionRO ro, String actionUserName);

    boolean deleteOne(Integer id);

    boolean deleteBatch(List<Integer> ids);

    Promotion getOne(Integer id);

    MsgDatasVO getList(Integer kind, Integer type, String title, Integer pageNum, Integer pageSize);

    boolean exists(Integer id, String title);

    /**
     * 查询不在促销的商品列表，且商品状态是正常的
     *
     * @param cid      商品分类Id
     * @param title    商品名称
     * @param pageNum
     * @param pageSize
     * @return
     */
    MsgDatasVO getNoPromItemList(Long cid, String title, Integer pageNum, Integer pageSize);

    /**
     * 查询某个促销的商品列表,不分页
     *
     * @param promId 促销Id
     * @param title  商品名称
     * @return
     */
    MsgDatasVO getPromItemList(Integer promId, String title);

    /**
     * 保存促销商品
     *
     * @param promId   促销Id
     * @param itemList 商品信息列表
     */
    boolean savePromotionItem(Integer promId, List<SavePromotionItemRo> itemList);


    //#region 前端小程序或APP相关接口

    /**
     * 获取当前有效促销列表，注：未过期的
     * @return
     */
    MsgDatasVO getMiniEffectiveList();


    /**
     *  商品下单减库存操作
     * @param itemId 商品id
     * @param promId 促销Id
     * @param num 数量
     * @return
     */
    boolean subtractItemNum(Long itemId,Integer promId,Integer num);

    /**
     * 商品取消订单后，库存恢复操作
     * @param itemId 商品id
     * @param promId 促销Id
     * @param num   数量
     * @return
     */
    boolean addItemNum(Long itemId,Integer promId,Integer num);

    //#endregion
}
